package org.jeecg.modules.message.service;

import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.message.entity.ProcurementMessage;

import java.util.List;

public interface IProcurementMessageService extends IService<ProcurementMessage> {

    /**
     * 获取未读消息
     * @param receiverId 接收人
     * @return 未读消息列表
     */
    List<ProcurementMessage> getUnreadMessages(String receiverId,String readStatus);//1

    /**
     * 根据业务获取消息
     * @param businessType 业务类型
     * @param businessId 业务ID
     * @return 消息列表
     */
    List<ProcurementMessage> getMessagesByBusiness(String businessType, String businessId);

    /**
     * 更新消息阅读状态
     * @param messageId 消息ID
     * @param readStatus 阅读状态
     * @return 是否成功
     */
    boolean updateReadStatus(String messageId, String readStatus);//3

    /**
     * 批量更新消息阅读状态
     * @param messageIds 消息ID列表
     * @param readStatus 阅读状态
     * @return 是否成功
     */
    boolean batchUpdateReadStatus(List<String> messageIds, String readStatus);//4

    /**
     * 发送采购计划审核通知
     * @param purchaseId 采购计划ID
     * @param Title 采购计划标题
     * @param auditStatus 审核状态
     * @param auditOpinion 审核意见
     * @param receiverId 接收人ID
     * @return 是否成功
     */
    boolean sendPurchasePlanNotice(String purchaseId, String Title, String auditStatus,
                                   String auditOpinion,String receiverId,String receiver);

    /**
     * 发送供应商审核通知
     * @param supplierId 供应商ID
     * @param supplierName 供应商名称
     * @param auditStatus 审核状态
     * @param auditOpinion 审核意见
     * @return 是否成功
     */
    boolean sendSupplierAuditNotice(String supplierId, String supplierName, String auditStatus,
                                    String auditOpinion,String receiverId,String receiver);

    /**
     * 发送投标通知
     * @param bidId 投标ID
     * @param bidTitle 投标标题
     * @param bidType 投标类型
     * @param receiverId 接收人
     * @return 是否成功
     */
    boolean sendBidNotice(String bidId, String bidTitle, String bidType,String receiverId,String receiver);

    /**
     * 发送开标通知
     * @param bidId 投标ID
     * @param bidTitle 投标标题
     * @param openTime 开标时间
     * @param receiverId 接收人ID
     * @return 是否成功
     */
    boolean sendBidOpeningNotice(String bidId, String bidTitle, String openTime,String receiverId,String receiver);

    /**
     * 发送中标结果通知
     * @param bidId 投标ID
     * @param bidTitle 投标标题
     * @param receiverId 接收人ID
     * @return 是否成功
     */
    boolean sendWinningResultNotice(String bidId, String bidTitle,String receiverId,String receiver);

    /**
     * 发送流标通知
     * @param bidId 投标ID
     * @param bidTitle 投标标题
     * @param reason 流标原因
     * @param receiverId 接收人ID
     * @return 是否成功
     */
    boolean sendBidFailureNotice(String bidId, String bidTitle, String reason,String receiverId,String receiver);

    /**
     * 发送投标即将截止提醒
     * @param bidId 投标ID
     * @param ProjectName 投标项目
     * @param deadlineTime 截止时间
     * @param receiverId 接收人ID
     * @return 是否成功
     */
    boolean sendBiddingDeadlineReminder(String bidId, String ProjectName, String deadlineTime,String receiverId,String receiver);


    /**
     * 发送投标已截止提醒
     * @param bidId 投标ID
     * @param bidTitle 投标标题
     * @param deadlineTime 截止时间
     * @param receiverId 接收人ID
     * @return 是否成功
     */
    boolean afSendBiddingDeadlineReminder(String bidId, String bidTitle, String deadlineTime,String receiverId,String receiver);
    /**
     * 批量发送投标即将截止提醒
     * @param bidId 投标ID
     * @param ProjectName 投标标题
     * @param deadlineTime 截止时间
     * @param receiverIds 接收人ID列表
     * @return 是否成功
     */
    boolean sendBatchBiddingReminder(String bidId, String ProjectName, String deadlineTime, List<String> receiverIds,String receiver);

    /**
     * 批量发送投标已止提醒
     * @param bidId 投标ID
     * @param ProjectName 投标标题
     * @param deadlineTime 截止时间
     * @param receiverIds 接收人ID列表
     * @return 是否成功
     */
    boolean afSendBatchBiddingReminder(String bidId, String ProjectName, String deadlineTime, List<String> receiverIds,String receiver);

    /**
     * 批量发送消息
     * @param title 消息标题
     * @param content 消息内容
     * @param messageType 消息类型
     * @param businessType 业务类型
     * @param businessId 业务ID
     * @param receiverIds 接收人Id列表
     * @return 是否成功
     */
    boolean sendBatchMessage(String title, String content, String messageType, String businessType,
                             String businessId,  List<String> receiverIds);

    /**
     * 获取消息数量统计
     * @param receiverId 接收人
     * @return 消息数量
     */
    int getMessageCount(String receiverId);

    /**
     * 获取未读消息数量
     * @param receiverId 接收人ID
     * @return 未读消息数量
     */
    int getUnreadMessageCount(String receiverId);//2



    /**
     * 根据消息类型获取消息
     * @param messageType 消息类型
     * @param receiverId 接收人ID
     * @return 消息列表
     */
    List<ProcurementMessage> getMessagesByType(String messageType,String receiverId);

    /**
     * 推送消息到客户端
     * @param userId 用户ID
     * @param message 消息内容
     * @return 是否推送成功
     */
    boolean pushMessageToClient(String userId, ProcurementMessage message);

//    /**
//     * 批量同步消息到客户端
//     * @param userIds 用户ID列表
//     */
//    void syncMessagesToClients(String[] userIds);
//
//    /**
//     * 发送消息并推送
//     * @param title 消息标题
//     * @param content 消息内容
//     * @param receiver 接收人
//     * @param businessType 业务类型
//     * @param businessId 业务ID
//     * @return 消息ID
//     */
//    String sendAndPushMessage(String title, String content, String receiver, String businessType, String businessId);

    Result<?> sendToUser(String userId,String uaername, String title, String content, String businessType, String businessId);

    Result<?> sendToUsers(String userIds, String title, String content);

    Result<?> broadcast(String title, String content);

    Result<?> sendAndPush(String title, String content, String receiverId, String businessType, String businessId);

    void sendLotteryWinningMessage(String supplierId, String businessId);


}
